package com.dzy.interceptor;

import java.lang.reflect.Field;
import java.util.List;

import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ReflectionUtils;
/**
 * @Description
 * webservice拦截器出口，查询结果记录日志
 * @author Dzy(yndxc@163.com)
 * created by 2016年11月24日下午5:04:17
 */
public class LogOutInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
	private final static Logger logger = LoggerFactory.getLogger(LogOutInterceptor.class);
	
	public LogOutInterceptor() {
		//因为AbstractPhaseInterceptor没有无参的构造函数，所以子类定义一个构造函数显式调用父类的带参构造函数，  
        //避免子类隐式调用父类无参构造函数导致错误  
        super(Phase.SEND);//表示拦截器作用的阶段，在Phase中定义有很多常量表示 ，这里我们作用到调用方法前
	}
	

	
	@Override
	public void handleMessage(SoapMessage message) throws Fault {
		Object obj = message.getContent(List.class).get(0);
		if(obj != null){
			Field f = ReflectionUtils.findField(obj.getClass(), "_return");
			if(f != null){
				ReflectionUtils.makeAccessible(f);
				obj = ReflectionUtils.getField(f, obj);
				if(obj != null){
					logger.info("return ["+obj.toString()+"]");
//					try {
//						String content = XmlUtil.xmlStr2Json(obj.toString());
//						logger.info("["+method+"] return "+content);
//					} catch (JSONException e) {
//						logger.error(e.getMessage());
//					}
				}
			}
		}
	}
    
}
